STM32F103 USB实现虚拟串口 |
您所在的位置:网站首页 › windows 虚拟串口源码 › STM32F103 USB实现虚拟串口 |
STM32F103 USB实现虚拟串口
最近买了一个STM32F103C8T6最小核心板,使用CubeIDE无法识别该芯片,发现该芯片的flash是128Kbytes,ST的标准库是64Kbytes,奇怪啊!也许是国产替代的,国产化太先进了,导致原厂落后了,不认识先进的东西了。 只好又在某宝买了5.5元的STM32F103C6T6最小核心板,CubeID环境下正常工作和调试。感谢万能的某宝!最便宜的东西才能工作正常,好无语啊! 实验环境STM32F103C6T6A最小系统板, CubeIDE 1.10.1, ST-LINK; 实现USB的串口数据传输; 操作步骤 cubeIDE建立工程并生成代码。设置晶振RCC![]() ![]() ![]() ![]() ![]() 修改接收函数代码 static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) { if(*LenTxState) { if(HAL_GetTick()-TimeStart > 10) return USBD_BUSY; else break; } USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len); result = USBD_CDC_TransmitPacket(&hUsbDeviceFS); TimeStart = HAL_GetTick(); while(hcdc->TxState) { if(HAL_GetTick()-TimeStart > 10) return USBD_BUSY; } /* USER CODE END 7 */ return result; }添加输出函数 #include void USB_printf(const char *format, ...)//USB模拟串口的打印函�? { va_list args; uint32_t length; va_start(args, format); length = vsnprintf((char *)UserTxBufferFS, APP_TX_DATA_SIZE, (char *)format, args); va_end(args); CDC_Transmit_FS(UserTxBufferFS, length); } 修改main.c 添加include文件 /* USER CODE BEGIN Includes */ #include "../../USB_DEVICE/App/usbd_cdc_if.h" /* USER CODE END Includes */修改main函数的while循环 /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ //USB模拟串口的查寻接收处理 if(USB_RX_STA!=0)//判断是否有 { //USB_printf("USB_RX:");//向USB模拟串口发字符串 CDC_Transmit_FS(USB_RX_BUF,USB_RX_STA);//USB串口:将接收的数据发回给电脑端 //USB_printf("\r\n");//向USB模拟串口发(回车) USB_RX_STA=0;//数据标志位清0 memset(USB_RX_BUF,0,sizeof(USB_RX_BUF));//USB串口数据寄存器清0 } } /* USER CODE END 3 */ 修改堆栈和堆;![]() 11.修改编译优化 设置编译优化: Properties for F10****/ C/C++ Build / Settings / MCU GCC Compiler / Optimization \ Optimization level = “Optimize for size(-Os)” 否则会出现错误如下: \tools\arm-none-eabi\bin\ld.exe: F103C6T6Atest.elf section .text' will not fit in region FLASH’ \tools\arm-none-eabi\bin\ld.exe: region `FLASH’ overflowed by 1656 bytes collect2.exe: error: ld returned 1 exit status make: *** [makefile:68: F103C6T6Atest.elf] Error 1 “make -j8 all” terminated with exit code 2. Build might be incomplete. 运行测试1.设备管理器可以看到串口; 2.使用串口工具,发送接收数据正常。 注意事项:STM32F103C6T6的存储容量比较小,实现USB的虚拟串口基本上用完了内存和flash,如果再添加别的复杂功能,估计存储就不够了。参看了一下生成的hex文件,已经达到38k了! 参考链接 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |